home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / misc / math / libalgo.lha / algomath / src / repdig.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-30  |  1.5 KB  |  108 lines

  1. /* replace a digit d1 of a number n by a digit d2*/
  2.  
  3. #include "defs.h"
  4.  
  5. int am_replace(int n, int d1, int d2)
  6. {
  7.     int t=n,x=0,j=0,i;
  8.     int dig[]={0,0,0,0,0,0,0,0,0,0};
  9.  
  10.     if(n>999999999)
  11.         return n;
  12.     if(d1<0)
  13.         d1 = -d1;
  14.     if(d1>9){
  15.         for(i = 0; i < 9; i++)
  16.             while(d1 >= _am_asciiconv[i])
  17.                 d1 -= _am_asciiconv[i];
  18.         while(d1 >= _am_asciiconv[i])
  19.         {
  20.             d1 -= _am_asciiconv[i];
  21.             j++;
  22.         }
  23.         d1=j;
  24.         j=0;
  25.     }
  26.     if(d2<0)
  27.         d2 = -d2;
  28.     if(d2>9){
  29.         for(i = 0; i < 9; i++)
  30.             while(d2 >= _am_asciiconv[i])
  31.                 d2 -= _am_asciiconv[i];
  32.         while(d2 >= _am_asciiconv[i])
  33.         {
  34.             d2 -= _am_asciiconv[i];
  35.             j++;
  36.         }
  37.         d2=j;
  38.     }
  39.  
  40.     if(n<0){
  41.         n = -n;
  42.         t = n;
  43.         x=1;
  44.     }
  45.  
  46.     while(n >= _am_asciiconv[0])
  47.     {
  48.         n -= _am_asciiconv[0];
  49.         dig[9]++;
  50.     }
  51.  
  52.     while(n >= _am_asciiconv[1])
  53.     {
  54.         n -= _am_asciiconv[1];
  55.         dig[8]++;
  56.     }
  57.  
  58.  
  59.     while(n >= _am_asciiconv[2])
  60.     {
  61.         n -= _am_asciiconv[2];
  62.         dig[7]++;
  63.     }
  64.  
  65.     while(n >= _am_asciiconv[3])
  66.     {
  67.         n -= _am_asciiconv[3];
  68.         dig[6]++;
  69.     }
  70.  
  71.     while(n >= _am_asciiconv[4])
  72.     {
  73.         n -= _am_asciiconv[4];
  74.         dig[5]++;
  75.     }
  76.  
  77.     while(n >= _am_asciiconv[5])
  78.     {
  79.         n -= _am_asciiconv[5];
  80.         dig[4]++;
  81.     }
  82.  
  83.     while(n >= _am_asciiconv[6])
  84.     {
  85.         n -= _am_asciiconv[6];
  86.         dig[3]++;
  87.     }
  88.  
  89.     while(n >= _am_asciiconv[7])
  90.     {
  91.         n -= _am_asciiconv[7];
  92.         dig[2]++;
  93.     }
  94.  
  95.     while(n >= _am_asciiconv[8])
  96.     {
  97.         n -= _am_asciiconv[8];
  98.         dig[1]++;
  99.     }
  100.  
  101.     dig[0]= n;
  102.  
  103.     if(x)
  104.         return -(t-dig[d1-1]*_am_asciiconv[10-d1]+d2*_am_asciiconv[10-d1]);
  105.     else
  106.         return t-dig[d1-1]*_am_asciiconv[10-d1]+d2*_am_asciiconv[10-d1];
  107.  
  108. }